/*	Main de la aplicacion Server
*
*
*/

#include <iostream>
#include <exception>
#include <cstdlib>

#include "ABM_Properties.h"
#include "ConnectionAcceptingThread.h"
#include "ThreadMonitor.h"
#include "const.h"
#include <syslog.h>
const char * USRDIR;

int main(int argc, char* argv[]) try{

	ABM_Properties prop(PROPERTIES);
	prop.LevantarFile();

	USRDIR = (prop.GetValueFromKey(PATH)).c_str();
	if(USRDIR);
	int port = atoi(prop.GetValueFromKey(PORT).c_str());

	syslog( LOG_INFO , "Iniciando server...");
	syslog( LOG_INFO , "El servidor se encuentra corriendo en el puerto: %d.", port);
	syslog( LOG_INFO , "El directorio donde se sincronizaran los documentos es: %s.", USRDIR);

	Thread * threadMonitor = new ThreadMonitor(PuertoEsp);
	threadMonitor->start();

	Thread * threadConexiones = new ConnectionAcceptingThread(port);
	threadConexiones->start();

	char c = 'a';
	while(c!='q') std::cin >> c;

	syslog( LOG_INFO , "Cerrando conexiones, finalizando server...");
	threadConexiones->stop();
	threadConexiones->join();
	delete(threadConexiones);

	threadMonitor->stop();
	threadMonitor->join();
	delete(threadMonitor);
	syslog( LOG_INFO , "El server se ha cerrado exitosamente.");
	return 0;
} catch(std::exception& e){
	std::cout << e.what() << std::endl;
	syslog(LOG_ERR, "El programa se ha cerrado inesperadamente: %s ", e.what());
}
